package com.zcxy360.sandtable.controller;

import org.apache.shiro.authz.annotation.Logical;
import org.apache.shiro.authz.annotation.RequiresAuthentication;
import org.apache.shiro.authz.annotation.RequiresRoles;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import com.zcxy360.sandtable.domain.CourseTeam;
import com.zcxy360.sandtable.service.CourseTeamService;

/**
 * 小组接口
 * @author 盛亚辉
 *
 */
@RequestMapping("course/team")
@RestController
public class CourseTeamController {

	@Autowired
	private CourseTeamService courseTeamService;
	
	/**
	 * 获取小组
	 * @param teamId 小组id
	 * @return 小组对象
	 */
	@RequiresAuthentication
	@GetMapping("{teamId}")
	public Object getByTeamId(@PathVariable("teamId") Integer teamId) {
		return  courseTeamService.getByTeamId(teamId);
	}
	
	/**
	 * 获取小组集合
	 * @param courseTeam 小组字段
	 * @param key 关键字
	 * @param orderByClause 排序规则
	 * @param pageNum 页码
	 * @param pageSize 页数
	 * @param navigatePages 导航数
	 * @return 小组集合
	 */
	@RequiresAuthentication
	@GetMapping
	public Object list(CourseTeam courseTeam,String key,String orderByClause,
			@RequestParam(defaultValue = "1") Integer pageNum,
			@RequestParam(defaultValue = "5") Integer pageSize,
			@RequestParam(defaultValue = "5") Integer navigatePages) {
		return courseTeamService.list(courseTeam,key,orderByClause,pageNum,pageSize,navigatePages);
	}

	/**
	 * 新增小组
	 * @param courseTeam 小组字段
	 * @return 小组对象
	 */
	@RequiresRoles(value={"teacher","student"},logical=Logical.OR)
	@PostMapping
	public Object post(CourseTeam courseTeam) {
		return courseTeamService.post(courseTeam);
	}
	
	/**
	 * 更新小组
	 * @param courseTeam 小组字段
	 * @return 布尔值
	 */
	@RequiresRoles(value={"teacher","student"},logical=Logical.OR)
	@PutMapping
	public Object update(CourseTeam courseTeam) {
		return courseTeamService.update(courseTeam);
	}
	
	/**
	 * 删除小组
	 * @param teamIds 小组id数组
	 * @return 布尔值
	 */
	@RequiresRoles("teacher")
	@DeleteMapping("{teamIds}")
	public Object delete(@PathVariable("teamIds") int[] teamIds) {
		return courseTeamService.delete(teamIds);
	}
	
	/**
	 * 提交沙盘推演作业
	 * @param courseTeam 小组字段
	 * @param drawingJson 图纸信息json字符串
	 * @param file 上传文件
	 * @return 布尔值
	 */
	@RequiresRoles("student")
	@PostMapping("inferSubmit")
	public Object inferSubmit(CourseTeam courseTeam,String drawingJson,MultipartFile file) {
		return courseTeamService.inferSubmit(courseTeam,drawingJson,file);
	}
	
	/**
	 * 提交项目路演作业
	 * @param courseTeam 小组字段
	 * @param pdfFile 上传的pdf文件
	 * @param videoFile 上传的video文件
	 * @return 布尔值
	 */
	@RequiresRoles("student")
	@PostMapping("roadSubmit")
	public Object roadSubmit(CourseTeam courseTeam,MultipartFile pdfFile,MultipartFile videoFile) {
		return courseTeamService.roadSubmit(courseTeam,pdfFile,videoFile);
	}
	
	/**
	 * 老师对小组提交作业的打分
	 * @param courseTeam 小组字段
	 * @return 布尔值
	 */
	@RequiresRoles("teacher")
	@PutMapping("mark")
	public Object mark(CourseTeam courseTeam) {
		return courseTeamService.mark(courseTeam);
	}
	
	/**
	 * 小组作业退回
	 * @param courseTeam 小组字段
	 * @return 布尔值
	 */
	@RequiresRoles("teacher")
	@PutMapping("back")
	public Object back(CourseTeam courseTeam) {
		return courseTeamService.back(courseTeam);
	}
}
